package 我的Java学习_算法基础.day_02;

public class 递归 {
    public static void main(String[] args) {
        int n = 5;
        f(n);
        System.out.println(f1(n));
        int i=1,j=7;
        f2(i,j);
    }

    //注意死循环
    static void f(int n){
        if(n==0)
            return;
        //调用自身
        f(n-1);
    }


    /*
        求n的阶乘-> 求f1(n-1)
        找重复：    n*(n-1),求n-1的阶乘是原问题的重复（规模更小）--子问题
        找变化：    变化的量作为参数---n
        找边界：    出口----n=1
    */
    static int f1(int n){
        if(n==1){
            return 1;
        }
        return n*f1(n-1);
    }
    /*
        打印i-j  -> 先打印i,再调用f2(i+1,j)
        找重复：    f2(i+1,j)是原问题的重复（规模更小）--子问题
        找变化：    变化的量作为参数 --i
        找边界：    出口---i>j
     */
    static void f2(int i,int j){
        if(i>j){
            return;
        }
        System.out.println(i);
        f2(i+1,j);

    }

}
